/**
 * Project: demo.web
 * 
 * File Created at 2009-11-16
 * $Id$
 * 
 * Copyright 2008 shensuoyao.com Croporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * shensuoyao Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with shensuoyao.com.
 */
package com.ssy.invoicing.common.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import org.apache.commons.lang.StringUtils;

/**
 * JSON 工具类处理类
 * @author wb_suoyao.shen
 */
@SuppressWarnings("unchecked")
public class JsonUtil {

    /**
     * 从对象转成字符串数据
     * 
     * @param obj 对象
     * @return String json数据
     */
    public static String toJsonString(Object obj) {
        if (obj instanceof List) {
            JSONArray jsonArray = JSONArray.fromObject(obj);
            return jsonArray.toString();
        }
        JSONObject jsonObject = JSONObject.fromObject(obj);
        return jsonObject.toString();
    }

    /**
     * 从对象转成字符串数据
     * 
     * @param obj 对象
     * @param jsonConfig 配置对象
     * @return String json数据的字符串表示
     */
    public static String toJsonString(Object obj,JsonConfig jsonConfig) {
        if (obj instanceof List) {
            JSONArray jsonArray = JSONArray.fromObject(obj,jsonConfig);
            return jsonArray.toString();
        }
        JSONObject jsonObject = JSONObject.fromObject(obj,jsonConfig);
        return jsonObject.toString();
    }
    
    /**
     * 把字符串转成Map
     * 
     * @param jsonData json数据
     * @param objClass 对象
     * @return 返回 一个 Map
     * @author wancun.chenwc
     */
    public static Map toMap(String jsonData) {
        JSONObject jo = JSONObject.fromObject(jsonData);
        return (HashMap) JSONObject.toBean(jo, HashMap.class);
    }

    /**
     * 把指定的key的第一个字母修改成为小写
     * 
     * @param key key
     * @return String 转换之后的数据，如果传入为null则返回null，如果传入为“”则返回空
     */
    public static String getRealKey(String key) {
        if (StringUtils.isEmpty(key)) {
            return key;
        }
        return key.substring(0, 1).toLowerCase() + key.substring(1);
    }

    /**
     * 把json字符串里面的某个key对应的数据转换成为一个List<String>
     * 
     * @param json JSON数据
     * @param key 字段的名字
     * @return List<String> 如果在json里面找不到对应的数值，则返回null,否则返回对应的列表数据
     */
    public static List<String> parseStringList(String json, String key) {
        try {
            JSONObject jo = JSONObject.fromObject(json);
            JSONArray array = jo.getJSONArray(key);
            Collection collectioin = JSONArray.toCollection(array, String.class);
            List<String> resultList = new ArrayList<String>();
            resultList.addAll(collectioin);
            return resultList;
        } catch (Exception e) {
            return null;
        }

    }

    /**
     * 把字符串转成指定的对象列表
     * 
     * @param jsonData json数据
     * @param objClass 对象
     * @return Object 最终生成的对象(是个List)
     */
    public static <T> List<T> toList(String jsonData, Class<? extends T> objClass) {
        JSONArray jo = JSONArray.fromObject(jsonData);
        List<T> dataList = new ArrayList<T>();
        dataList.addAll((Collection<T>) JSONArray.toCollection(jo, objClass));
        return dataList;
    }
    
    public static void main(String args[])throws Exception{
    
    }
    
}
